Code
%%capture
! pip install pyspssio%%capture
! pip install pyspssioimport numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
import pyspssio
import re
sns.set_palette("pastel")
sns.set_theme(style="whitegrid", palette="pastel", context="notebook")
df, meta = pyspssio.read_sav("Data_frame_VD.sav")names = [
'confident_about_future',
'changed_confident',
'changed_fin_sit',
'expectation'
]
for name in names:
unique_labels = list(meta['var_value_labels'][name].values())
order = unique_labels
palette = sns.color_palette("pastel", n_colors=len(unique_labels))
color_mapping = dict(zip(unique_labels, palette))
plt.figure(figsize=(8, 6))
sns.countplot(
x=df[name].map(meta['var_value_labels'][name]),
hue=df[name].map(meta['var_value_labels'][name]),
order=order,
palette=color_mapping
)
plt.ylabel('Число респондентов', fontsize=12)
plt.title(meta['var_labels'][name].replace(" Выберите один вариант ответа.", ""), fontsize=14, ha='center', wrap=True)
plt.xlabel('Варианты ответа', fontsize=12, wrap=True)
plt.xticks(fontsize=12, rotation=45, ha='right')
plt.yticks(fontsize=12)
plt.savefig(name, dpi=300, bbox_inches='tight')
plt.show()names = [
'count_clothes_free',
'count_clothes_sale',
'quality_clothes_free',
'quality_count_clothes_sale'
]
for name in names:
unique_labels = list(meta['var_value_labels'][name].values())
order = unique_labels
palette = sns.color_palette("pastel", n_colors=len(unique_labels))
color_mapping = dict(zip(unique_labels, palette))
plt.figure(figsize=(8, 6))
sns.countplot(
x=df[name].map(meta['var_value_labels'][name]),
hue=df[name].map(meta['var_value_labels'][name]),
order=order,
palette=color_mapping
)
plt.ylabel('Число респондентов', fontsize=12)
plt.title(meta['var_labels'][name].replace(" Выберите один вариант ответа.", ""), fontsize=14, ha='center', wrap=True)
plt.xlabel('Варианты ответа', fontsize=12, wrap=True)
plt.xticks(fontsize=12, rotation=45, ha='right')
plt.yticks(fontsize=12)
plt.savefig(name, dpi=300, bbox_inches='tight')
plt.show()names = [f'q5_{i}' for i in range(1, 20)]
slovar = {f'{meta['var_labels'][name][:40]}...': (df[name]==1).sum() for name in names}
to_vis = pd.DataFrame(list(slovar.items()), columns=['var', 'count'])
palette = sns.color_palette("pastel", n_colors=len(names))
plt.figure(figsize=(10, 6))
sns.barplot(
data = to_vis,
x='var',
y='count',
hue='var',
order=slovar.keys(),
palette=palette
)
plt.ylabel('Число респондентов', fontsize=12)
plt.title('Какими из перечисленных ниже способов обращения с одеждой, которая вам больше не нужна, вы готовы воспользоваться в ближайшие 1-2 года?', fontsize=14, ha='center', wrap=True)
plt.xlabel('Варианты ответа', fontsize=12, wrap=True)
plt.xticks(fontsize=12, rotation=45, ha='right')
plt.yticks(fontsize=12)
plt.savefig('budu_delat', dpi=300, bbox_inches='tight')
plt.show()questions = {
'q2_1': 'Одежда в магазинах стала хуже',
'q2_2': 'Люди стали покупать более дешевую\nодежду и хуже по качеству',
'q2_3': 'Люди стали чаще ремонтировать и\nчинить одежду',
'q2_4': 'Люди стали дольше носить одежду',
'q2_5': 'Из-за неуверенности в завтрашнем дне\nлюди стали менее охотно отдавать одежду',
'q2_6': 'Люди стали реже избавляться от одежды,\nдонашивают ее дома или на даче',
'q2_7': 'Это проблема отдельных фондов.\nНа мой взгляд, ситуация\nв целом не изменилась',
'q2_8': 'Затрудняюсь ответить'
}
sums_df = df[['q2_1', 'q2_2', 'q2_3', 'q2_4', 'q2_5', 'q2_6', 'q2_7', 'q2_8']].sum().reset_index()
sums_df.columns = ['quest', 'count_ans']
sums_df['quest'] = sums_df['quest'].map(questions)
plt.figure(figsize=(10, 6))
sns.barplot(
x=sums_df['quest'],
y=sums_df['count_ans'],
hue=sums_df['quest']
)
plt.xticks(rotation=45, ha='right')
plt.ylabel('Количество ответов', fontsize=12)
plt.title('Учитывая опыт ваш и вашего окружения, как вы думаете, почему могло ухудшиться качество сдаваемой в фонды одежды за два года? (множественный выбор)', fontsize=14, ha='center', wrap=True)
plt.xlabel('Варианты ответа', fontsize=12, wrap=True)
plt.xticks(fontsize=12, rotation=45, ha='right')
plt.yticks(fontsize=12)
plt.savefig('changing_in_quality', dpi=300, bbox_inches='tight')
plt.show()freqs_names = {
'frequency1': 'Выбрасывать на помойку',
'frequency2': 'Оставлять у мусорного бака',
'frequency3': 'Оставлять дома, «до лучших времен»',
'frequency4': 'Использовать одежду до полного износа',
'frequency5': 'Выкладывать в подъезде, на добрые полки',
'frequency6': 'Переделывать, реставрировать для дальнейшего использования',
'frequency7': 'Отдавать членам семьи',
'frequency8': 'Отдавать друзьям, знакомым, соседям',
'frequency9': 'Бесплатно передавать через интернет-площадки, онлайн сообщества, чаты незнакомым людям',
'frequency10': 'Передавать в храм, пункты социальной помощи',
'frequency11': 'Передавать в благотворительный фонд, благотворительный магазин',
'frequency12': 'Класть в контейнер для сбора одежды',
'frequency13': 'Приносить одежду на СВОП (мероприятие для обмена одеждой)',
'frequency14': 'Участвовать в акциях для сбора одежды на благотворительность',
'frequency15': 'Продавать через интернет',
'frequency16': 'Сдавать на продажу в секонд-хенд магазин',
'frequency17': 'Сдавать на утилизацию в магазины, чтобы получить скидку на новые товары'
}
unique_labels = list(meta['var_value_labels']['frequency1'].values())
palette = sns.color_palette("pastel", n_colors=len(unique_labels))
color_mapping = dict(zip(unique_labels, palette))
freqs = [f'frequency{ii}' for ii in range(1, 17+1)]
for freq in freqs:
plt.figure(figsize=(8, 6))
order = unique_labels
sns.countplot(
x=df[freq].map(meta['var_value_labels']['frequency1']),
hue=df[freq].map(meta['var_value_labels']['frequency1']),
order=order,
palette=color_mapping
)
plt.ylabel('Число респондентов', fontsize=12)
plt.title('Как за последние 2 года изменилась частота, с которой вы пользуетесь способом обращения с ненужной вам одеждой?', fontsize=14, ha='center', wrap=True)
plt.xlabel(freqs_names[freq], fontsize=14, wrap=True)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.savefig(f'changed_{re.sub(r'\D', '', freq)}', dpi=300, bbox_inches='tight')
plt.show()